-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "i2c_scanner"
VERSION = "1.0.0"

-- sys库是标配
sys = require("sys")

-- I2C扫描工具，用于检测总线上的设备

-- 接线说明
-- SDA - I2C_SDA
-- SCL - I2C_SCL

-- 电平设置为3.3v
pm.ioVol(pm.IOVOL_ALL_GPIO, 3300)
-- 设置gpio2输出,给camera_sda、camera_scl引脚提供上拉
gpio.setup(2, 1)

sys.taskInit(function()
    log.info("i2c_scanner", "开始扫描I2C总线...")
    
    -- 尝试不同的I2C总线ID
    for i2c_id = 0, 1 do  -- 假设设备有0和1两个I2C总线
        log.info("i2c_scanner", "扫描I2C总线 " .. i2c_id)
        
        -- 尝试不同的速度
        local speeds = {i2c.SLOW, i2c.FAST, i2c.FAST_PLUS}
        local speed_names = {"SLOW", "FAST", "FAST_PLUS"}
        
        for speed_idx, speed in ipairs(speeds) do
            log.info("i2c_scanner", "  使用速度: " .. speed_names[speed_idx])
            
            -- 设置I2C
            i2c.setup(i2c_id, speed)
            
            -- 记录找到的设备
            local found_devices = {}
            
            -- 扫描标准I2C地址范围 (0x03-0x77)
            for addr = 0x03, 0x77 do
                -- 跳过一些特殊地址
                if addr ~= 0x00 and addr ~= 0x7F then
                    -- 尝试向设备发送一个空字节，看是否有应答
                    local ret = i2c.send(i2c_id, addr, "")
                    
                    -- 如果发送成功，说明设备存在
                    if ret == 0 then
                        table.insert(found_devices, addr)
                        log.info("i2c_scanner", "    找到设备! 地址: 0x" .. string.format("%02X", addr))
                    end
                end
            end
            
            -- 显示扫描结果
            if #found_devices > 0 then
                log.info("i2c_scanner", "  总线" .. i2c_id .. "速度" .. speed_names[speed_idx] .. "扫描完成，找到 " .. #found_devices .. " 个设备:")
                for _, addr in ipairs(found_devices) do
                    log.info("i2c_scanner", "    0x" .. string.format("%02X", addr))
                end
            else
                log.info("i2c_scanner", "  总线" .. i2c_id .. "速度" .. speed_names[speed_idx] .. "未找到任何设备")
            end
            
            sys.wait(500)
        end
    end
    
    log.info("i2c_scanner", "扫描完成!")
    log.info("i2c_scanner", "请使用上述找到的地址修改jx90614.lua中的JX90614_ADDRESS")
end)

-- 必须加这一行
-- 启动系统任务调度
sys.run()